[Design pattern]: 设计模式相关系列
介绍 意图: 将对象组合成树形结构以表示“部分 -整体”的层次结构。 C o m p o s i t e使得用户对单个对象和组合对象的使用具有一致性。适用性: 1,你想表示对象的部分 -整体层次结构。 2,你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。应用场景 :树形结构,从树顶控制整个树的操作.
CODE
政府接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package note.com.composite;public interface Government { public void build (String str1) ; public boolean add (Government gov) ; public boolean delete (Government gov) ; }
定义了默认方法的抽象类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package note.com.composite;public abstract class AbstractGovernment implements Government { public boolean add (Government gov) { return false ; } public boolean delete (Government gov) { return false ; } }
树顶,根节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 package note.com.composite;import java.util.ArrayList;import java.util.List;public class ChinaGov extends AbstractGovernment { private List<Government> govList = new ArrayList <Government>(); public void build (String str1) { System.out.println("中国:" +str1); doIter(str1); } private void doIter (String str1) { for (Government gov:govList){ gov.build(str1); } } @Override public boolean add (Government gov) { govList.add(gov); return true ; } @Override public boolean delete (Government gov) { govList.remove(gov); return true ; } }
无子节点的节点
1 2 3 4 5 6 7 8 9 10 11 12 13 package note.com.composite;public class BeiJingGov extends AbstractGovernment { public void build (String str1) { System.out.println("北京市:" +str1); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package note.com.composite;public class ZhengZhouGov extends AbstractGovernment { public void build (String str1) { System.out.println("郑州市:" +str1); } }
有子节点的节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 package note.com.composite;import java.util.ArrayList;import java.util.List;public class HeNanGov extends AbstractGovernment { private List<Government> govList = new ArrayList <Government>(); public void build (String str1) { System.out.println("河南省:" +str1); doIter(str1); } private void doIter (String str1) { for (Government gov:govList){ gov.build(str1); } } @Override public boolean add (Government gov) { govList.add(gov); return true ; } @Override public boolean delete (Government gov) { govList.remove(gov); return true ; } }
测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package note.com.composite;public class CompositeTest { public static void main (String[] args) { Government gov = new ChinaGov (); Government beijing = new BeiJingGov (); Government henan = new HeNanGov (); gov.add(beijing); gov.add(henan); Government zhengzhou = new ZhengZhouGov (); henan.add(zhengzhou); gov.build("大扫除" ); henan.build("涨工资" ); } }